<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>原型链</title>
</head>
<body>


  <script>
    // 这种搜索的轨迹,形似一条长链, 又因prototype在这个游戏规则中充当链接的作用,于是我们把这种实例与原型的链条称作 原型链 . 下面有个例子
    function Father(){
      this.property = true;
    }
    Father.prototype.getFatherValue = function(){
      return this.property;
    }
    
    function Son(){
      this.sonProperty = false;
    }
    //继承 Father
    Son.prototype = new Father();//Son.prototype被重写,导致Son.prototype.constructor也一同被重写
    Son.prototype.getSonVaule = function(){
      return this.sonProperty;  
    }
    var instance = new Son();
    // alert(instance.getFatherValue());//true

    console.log('father', new Father())
    console.log('son', instance)

    // 确定原型和实例的关系
    // 使用原型链后, 我们怎么去判断原型和实例的这种继承关系呢? 方法一般有两种.
    // 第一种是使用 instanceof 操作符, 只要用这个操作符来测试实例(instance)与原型链中出现过的构造函数,结果就会返回true. 以下几行代码就说明了这点.


    console.log(instance instanceof Object) //true
    console.log(instance instanceof Father) //true
    console.log(instance instanceof Son)    //true 由于原型链的关系, 我们可以说instance 是 Object, Father 或 Son中任何一个类型的实例. 因此, 这三个构造函数的结果都返回了true.
  </script>
  
</body>
</html>